library(rmarkdown)
knitr::opts_chunk$set(fig.align="center", cache=F, prompt=FALSE, comment = NA, eval = TRUE)1 Descrição da atividade
Vamos considerar a aplicação de uma árvore de regressão à base de dados abalone, do pacote AppliedPredictiveModeling. Os dados referem-se a 4177 espécimes de abalone, tipo de molusco encontrado ao longo das águas costeiras de todos os continentes. A variável resposta é a idade do molusco, aferida pelo número de anéis internos, que é um procedimento demorado e pouco adequado. O objetivo é ajustar um modelo que permita estimar a idade a partir de outras medidas, que são obtidas com maior facilidade. Para maiores detalhes a respeito da base, consultar a documentação e o link fornecido.
Para a análise, as primeiras 3000 linhas deverão ser usadas para ajuste, e as demais para validação.
Qual o tamanho da árvore (número de nós finais) selecionada por validação cruzada? Quantas são as partições? Nota: Fixe a semente com set.seed(1). Estabeleça cp = 0.001 para o processo de poda.
Quantas covariáveis aparecem no ajuste da árvore?
R: Somente duas covariáveis foram escolhidas pelo algoritmo para ajustar a árvore: ShellWeight e ShuckedWeight.
- Qual a idade estimada para moluscos com:
- ShellWeight=0.18 e ShuckedWeight=0.25;
- ShellWeight=0.31 e ShuckedWeight=0.45?
Qual o resíduo para cada um dos dados? Considere, para o primeiro, Rings=8 e para o segundo Rings=10.
Usando os dados de validação, calcule e apresente o valor da soma de quadrados de resíduos.
2 Carregando pacote
library(AppliedPredictiveModeling) # contém o conjunto de dados "abalone"
library(PerformanceAnalytics) # Gráfico da matriz de correlações
library(rpart) # Ajustar um modelo de árvore de regressão (CART)
library(rpart.plot) # Plotar uma árvore de regressão
library(xlsx) # Salvar para excel
library(ggplot2) # Vizualização gráfica
library(data.table) # manipulação de dados
library(gridExtra) # tabela em ggplot2
library(ggthemes)
#library(caret) 3 Carregando dados e fazendo manipulações
?abalone
data(abalone) # carrega conjunto de dados
str(abalone) # estrutura do data frame
'data.frame': 4177 obs. of 9 variables:
$ Type : Factor w/ 3 levels "F","I","M": 3 3 1 3 2 2 1 1 3 1 ...
$ LongestShell : num 0.455 0.35 0.53 0.44 0.33 0.425 0.53 0.545 0.475 0.55 ...
$ Diameter : num 0.365 0.265 0.42 0.365 0.255 0.3 0.415 0.425 0.37 0.44 ...
$ Height : num 0.095 0.09 0.135 0.125 0.08 0.095 0.15 0.125 0.125 0.15 ...
$ WholeWeight : num 0.514 0.226 0.677 0.516 0.205 ...
$ ShuckedWeight: num 0.2245 0.0995 0.2565 0.2155 0.0895 ...
$ VisceraWeight: num 0.101 0.0485 0.1415 0.114 0.0395 ...
$ ShellWeight : num 0.15 0.07 0.21 0.155 0.055 0.12 0.33 0.26 0.165 0.32 ...
$ Rings : int 15 7 9 10 7 8 20 16 9 19 ...
head(abalone, 10) # ler as primeiras 10 linhas4 Análise exploratória dos dados
4.1 Distribuição das variáveis
#pairs((abalone[,1:ncol(abalone)]), panel=panel.smooth)
#ggpairs(abalone)
chart.Correlation(abalone[,2:9], histogram=TRUE, pch=19)ggplot(abalone, aes(x=Type, fill=Type)) + geom_bar() +
scale_fill_brewer(palette = "Set1")4.2 Tabelas de frequências
with(abalone,table(Type)) # tabela freq. p/ variável Type
Type
F I M
1307 1342 1528
with(abalone,prop.table(table(Type))*100) # tabela freq. (%) p/ variável Type
Type
F I M
31.29040 32.12832 36.58128
with(abalone,table(Rings)) # tabela freq. (%) p/ variável Rings (número de anéis)
Rings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
1 1 15 57 115 259 391 568 689 634 487 267 203 126 103 67 58 42
19 20 21 22 23 24 25 26 27 29
32 26 14 6 9 2 1 1 2 1 5 Dividindo conjunto de dados: Treino e Teste
Para avaliar a capacidade preditiva do modelo a ser ajustado, a base foi dividida, aleatoriamente, em duas novas bases: a primeira, com 3000 observações, para o ajuste e demais foram deixadas para avaliação do modelo (base de teste).
train <- abalone[1:3000,]
test <- abalone[(nrow(train)+1):nrow(abalone),]
with(train,table(Rings)) # tabela freq. p/ variável Rings (número de anéis)
Rings
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
1 1 12 41 87 185 298 406 498 452 315 196 141 91 77 45 47 30
19 20 21 22 23 25 26 27 29
24 21 12 6 9 1 1 2 1
with(test,table(Rings)) # tabela freq. p/ variável Rings (número de anéis)
Rings
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 16 28 74 93 162 191 182 172 71 62 35 26 22 11 12 8 5
21 24
2 2 6 Ajuste do modelo - Árvore de Regressão (Package Rpart) - Implementa o CART
A variável resposta alvo da modelagem será Rings (número de anéis) do molusco. Para se obter a idade do molusco deve-se somar Rings + 1,5. A função rpart tem o seguinte escopo:
rpart(formula, data, weights, subset, na.action = na.rpart, method, model = FALSE, x = FALSE, y = TRUE, parms, control, cost, …)
O parâmetro control recebe uma lista de opções que controlam detalhes do algoritmo rpart. O escopo geral e os parâmetros passíveis de serem controlados estão detalhados abaixo:
rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01, maxcompete = 4, maxsurrogate = 5, usesurrogate = 2, xval = 10, surrogatestyle = 0, maxdepth = 30, …)
minsplit = o número mínimo de observações que devem existir em um nó para que uma divisão seja tentada.
minbucket = o número mínimo de observações em qualquer nó terminal
cp (parâmetro de complexidade) = Qualquer divisão que não diminua a falta total (SSEpai?) de ajuste por um fator de cp não é tentada. Por exemplo, com anova splitting, isso significa que o R-quadrado total deve aumentar em cp em cada etapa. O principal papel desse parâmetro é economizar tempo de computação removendo as divisões que obviamente não valem a pena. Essencialmente, o usuário informa ao programa que qualquer divisão que não melhore o ajuste por cp provavelmente será eliminada por validação cruzada, e que, portanto, o programa não precisa buscá-la.
maxcompete = o número de divisões do concorrente retidas na saída. É útil saber não apenas qual divisão foi escolhida, mas qual variável veio em segundo, terceiro, etc.
maxsurrogate = o número de divisões substitutas retidas na saída. Se isso for definido como zero, o tempo de cálculo será reduzido, uma vez que aproximadamente metade do tempo computacional (diferente de setup) é usado na busca por splits substitutos.
usesurrogate = como usar substitutos no processo de divisão. 0 significa apenas exibição; uma observação com um valor ausente para a regra de divisão primária não é enviada mais abaixo na árvore. 1 significa usar substitutos, em ordem, para dividir os sujeitos que não têm a variável primária; se todos os substitutos estiverem ausentes, a observação não será dividida. Para o valor 2, se todos os substitutos estiverem ausentes, envie a observação na direção majoritária. Um valor de 0 corresponde à ação da árvore e 2 às recomendações de Breiman et.al (1984).
xval = número de validações cruzadas.
surrogatestyle = controla a seleção de um melhor substituto. Se definido como 0 (padrão), o programa usa o número total de classificações corretas para uma variável substituta em potencial, se definida como 1, usa a porcentagem correta, calculada sobre os valores não ausentes do substituto. A primeira opção penaliza mais severamente as covariáveis com um grande número de valores omissos.
maxdepth = Define a profundidade máxima de qualquer nó da árvore final, com o nó raiz contado como profundidade 0. Valores maiores que 30 rpart fornecerão resultados sem sentido em máquinas de 32 bits.
6.1 Usando cp = 1 para ajustar a árvore (sempre resultará em uma árvore sem divisões)
# Um valor de cp = 1 sempre resultará em uma árvore sem divisões
set.seed(1)
(tree.cp1 <- rpart(Rings ~ ., data = train, control = rpart.control(cp = 1)))
n= 3000
node), split, n, deviance, yval
* denotes terminal node
1) root 3000 33030.56 9.941 *6.2 Usando cp = 0.01 (parâmetro default) para ajustar a árvore
# Aqui o valor de cp = 0.01 (padrão)
set.seed(1)
(tree <- rpart(Rings ~ ., data = train, method="anova", control = rpart.control(cp = 0.01)))
n= 3000
node), split, n, deviance, yval
* denotes terminal node
1) root 3000 33030.5600 9.941000
2) ShellWeight< 0.19475 1248 6526.1660 7.853365
4) ShellWeight< 0.06775 333 874.7988 5.939940 *
5) ShellWeight>=0.06775 915 3988.4870 8.549727
10) ShellWeight< 0.11925 367 1046.7740 7.771117 *
11) ShellWeight>=0.11925 548 2570.2240 9.071168 *
3) ShellWeight>=0.19475 1752 17190.9400 11.428080
6) ShellWeight< 0.4095 1417 11055.2900 10.956250
12) ShuckedWeight>=0.39975 834 4041.4240 10.395680
24) ShellWeight< 0.29275 307 705.5179 9.397394 *
25) ShellWeight>=0.29275 527 2851.7270 10.977230 *
13) ShuckedWeight< 0.39975 583 6376.8990 11.758150
26) ShellWeight< 0.25475 321 2310.4740 10.707170
52) ShuckedWeight>=0.2425 271 1280.6350 10.195570 *
53) ShuckedWeight< 0.2425 50 574.4800 13.480000 *
27) ShellWeight>=0.25475 262 3277.4500 13.045800 *
7) ShellWeight>=0.4095 335 4485.8090 13.423880
14) ShuckedWeight>=0.589 237 2425.2490 12.497890
28) ShellWeight< 0.568 188 1250.3190 11.797870 *
29) ShellWeight>=0.568 49 729.3469 15.183670 *
15) ShuckedWeight< 0.589 98 1365.8880 15.663270 *A função print imprime a árvore construída (neste caso, com os parâmetros de controle padrão). Foram geradas 21 regras (nós), que proporcionaram a criação de 10 divisões e 11 nós terminais (leaf). O simbolo * denota um nó terminal. Somente duas variáveis foram escolhidas pelo algoritmo para trabalhar as divisões: ShellWeight e ShuckedWeight.
print(tree)
n= 3000
node), split, n, deviance, yval
* denotes terminal node
1) root 3000 33030.5600 9.941000
2) ShellWeight< 0.19475 1248 6526.1660 7.853365
4) ShellWeight< 0.06775 333 874.7988 5.939940 *
5) ShellWeight>=0.06775 915 3988.4870 8.549727
10) ShellWeight< 0.11925 367 1046.7740 7.771117 *
11) ShellWeight>=0.11925 548 2570.2240 9.071168 *
3) ShellWeight>=0.19475 1752 17190.9400 11.428080
6) ShellWeight< 0.4095 1417 11055.2900 10.956250
12) ShuckedWeight>=0.39975 834 4041.4240 10.395680
24) ShellWeight< 0.29275 307 705.5179 9.397394 *
25) ShellWeight>=0.29275 527 2851.7270 10.977230 *
13) ShuckedWeight< 0.39975 583 6376.8990 11.758150
26) ShellWeight< 0.25475 321 2310.4740 10.707170
52) ShuckedWeight>=0.2425 271 1280.6350 10.195570 *
53) ShuckedWeight< 0.2425 50 574.4800 13.480000 *
27) ShellWeight>=0.25475 262 3277.4500 13.045800 *
7) ShellWeight>=0.4095 335 4485.8090 13.423880
14) ShuckedWeight>=0.589 237 2425.2490 12.497890
28) ShellWeight< 0.568 188 1250.3190 11.797870 *
29) ShellWeight>=0.568 49 729.3469 15.183670 *
15) ShuckedWeight< 0.589 98 1365.8880 15.663270 *A função summary fornece um resumo amplo do modelo ajustado. A função também reconhece a opção cp que permite ao usuário imprimir apenas poucas divisões superiores. Pode-se, por exemplo, imprimir apenas divisões com cp superiores à 0.02. Na tabela são informados os valores de CP (parâmetro de complexidade), nsplit (número de divisões), rel error (erro relativo), xerror e xstd (erro padrão obtido com base no conjunto de validação). O score CP é impresso da menor árvore (sem divisões) - que terá o maior CP - para a maior e mais complexa (10 divisões), que terá obviamente o menor CP. O número de nós terminais é sempre 1 + o número de divisões (10), portanto têm-se 11 nós terminais. O rel error (erro relativo) é obtido fazendo-se \(1-R^2\) (coeficiente de determinação), semelhante à regressão linear (parece ser as previsões do modelo sobre o conjunto de treinamento). Do contrário, o xerror está relacionado à estatística PRESS (parece ser o erro do modelo sobre o conjunto de validação). O \(R^2\) é calculado fazendo-se SSR/SST, em que: SSR = soma total do erro (valor previsto - valor médio)^2; e SST = soma total do erro (valor real - valor médio)^2. O \(R^2\) também pode ser calculado por 1-SSE /SST. Em que: SSE = soma total do erro (valor real - valor previsto)^2.
A estatística de soma dos quadrados de erros residuais previstos (PRESS) é uma forma de validação cruzada usada na análise de regressão para fornecer uma medida resumida do ajuste de um modelo a uma amostra de observações que não foram usadas para estimar o modelo. É calculado como as somas de quadrados dos resíduos de previsão para essas observações. Tendo sido produzido um modelo ajustado, cada observação, por sua vez, é removida e o modelo é refeito usando as observações restantes. O valor predito fora da amostra é calculado para a observação omitida em cada caso, e a estatística PRESS é calculada como a soma dos quadrados de todos os erros de previsão resultantes.
Tendo sido produzido um modelo ajustado, cada observação, por sua vez, é removida e o modelo é refeito usando as observações restantes. O valor predito fora da amostra é calculado para a observação omitida em cada caso, e a estatística PRESS é calculada como a soma dos quadrados de todos os erros de previsão resultantes.
Como escolher a melhor árvore?
A convenção é usar a melhor árvore (menor erro de validação cruzada) ou a menor árvore (mais simples) dentro de 1 erro padrão (SE) da melhor árvore (regra 1-SE). A regra 1-SE aconselha a procurar a árvore de erro mínimo, mas depois subir 1-SE na busca de uma árvore menos complexa (mais simples). Asssim, para este problema em específico, inicialmente, encontramos que a divisão nsplits = 10 foi aquela com menor erro na validação (xerror = 0.5677094, com xstd = 0.02477702). Em seguida, fazendo-se o cálculo para a regra 1-SE ter-se-ia: \(0.5677094 + 1*0.02477702 = 0.5924864\). Então, o valor obtido pela regra 1-SE foi 0.5924864. Portanto, a regra 1-SE sugere que uma árvore com 7 divisões (xerror = 0.5826542 é menor que o limiar da regra 1-SE, ou seja, está dentro de 1-SE da melhor árvore) faz efetivamente o mesmo trabalho do que a árvore com 10 divisões (que possui o menor xerror = 0.5677094). Por fim, a árvore com 7 divisões pode ser considerada o modelo mais parcimonioso, cujo erro não é mais do que 1-SE (erro padrão) acima do erro do melhor modelo (árvore com 10 divisões).
A melhoria (CP) é a alteração percentual no SSE (soma de erro quadrático) para essa divisão, ou seja, \(1 - (SS_{right} + SS_{left})/SS_{parent}\), que é o ganho em \(R^2\) para o ajuste. (Fonte: An Introduction to Recursive Partitioning Using the RPART Routines) (Therneau et al., 2018, p.37). Assim, por exemplo, o valor CP = 0.281965 para o nó raiz (sem divisão) é obtido fazendo-se: \(1 - (6526.166 + 17190.94)/33030.56 = 0.281965\). Em que: \(SS_{right}\) = soma de erro quadrático na parte direita da árvore; \(SS_{left}\) = soma de erro quadrático na parte esquerda da árvore; \(SS_{parent}\) = soma de erro quadrático no nó “pai”.
summary(tree, cp = 0.02) # um resumo da árvore (imprimindo divisões com cp superiores à 0.02)
Call:
rpart(formula = Rings ~ ., data = train, method = "anova", control = rpart.control(cp = 0.01))
n= 3000
CP nsplit rel error xerror xstd
1 0.28196475 0 1.0000000 1.0005429 0.03843041
2 0.05034368 1 0.7180352 0.7275070 0.03044610
3 0.04994897 2 0.6676916 0.6829629 0.02903991
4 0.02158515 3 0.6177426 0.6471234 0.02758708
5 0.02103120 5 0.5745723 0.6295624 0.02703700
6 0.01465854 6 0.5535411 0.5990034 0.02605649
7 0.01378599 7 0.5388826 0.5826542 0.02512203
8 0.01349002 8 0.5250966 0.5817429 0.02510887
9 0.01124683 9 0.5116066 0.5771405 0.02495954
10 0.01000000 10 0.5003597 0.5677094 0.02477702
Variable importance
ShellWeight WholeWeight Diameter LongestShell VisceraWeight
21 17 16 15 15
ShuckedWeight Height
14 1
Node number 1: 3000 observations, complexity param=0.2819648
mean=9.941, MSE=11.01019
left son=2 (1248 obs) right son=3 (1752 obs)
Primary splits:
ShellWeight < 0.19475 to the left, improve=0.2819648, (0 missing)
Height < 0.1225 to the left, improve=0.2545448, (0 missing)
WholeWeight < 0.5665 to the left, improve=0.2490117, (0 missing)
VisceraWeight < 0.12075 to the left, improve=0.2484626, (0 missing)
Diameter < 0.3475 to the left, improve=0.2434915, (0 missing)
Surrogate splits:
WholeWeight < 0.65975 to the left, agree=0.952, adj=0.885, (0 split)
Diameter < 0.4025 to the left, agree=0.939, adj=0.853, (0 split)
VisceraWeight < 0.14525 to the left, agree=0.926, adj=0.821, (0 split)
LongestShell < 0.5125 to the left, agree=0.923, adj=0.814, (0 split)
ShuckedWeight < 0.27125 to the left, agree=0.908, adj=0.778, (0 split)
Node number 2: 1248 observations, complexity param=0.05034368
mean=7.853365, MSE=5.2293
left son=4 (333 obs) right son=5 (915 obs)
Primary splits:
ShellWeight < 0.06775 to the left, improve=0.2548019, (0 missing)
Diameter < 0.2425 to the left, improve=0.2363086, (0 missing)
WholeWeight < 0.19675 to the left, improve=0.2349016, (0 missing)
Height < 0.0975 to the left, improve=0.2327504, (0 missing)
LongestShell < 0.3425 to the left, improve=0.2316758, (0 missing)
Surrogate splits:
WholeWeight < 0.20675 to the left, agree=0.960, adj=0.850, (0 split)
Diameter < 0.2725 to the left, agree=0.952, adj=0.820, (0 split)
LongestShell < 0.3525 to the left, agree=0.943, adj=0.787, (0 split)
VisceraWeight < 0.04825 to the left, agree=0.942, adj=0.781, (0 split)
ShuckedWeight < 0.08525 to the left, agree=0.936, adj=0.760, (0 split)
Node number 3: 1752 observations, complexity param=0.04994897
mean=11.42808, MSE=9.812179
left son=6 (1417 obs) right son=7 (335 obs)
Primary splits:
ShellWeight < 0.4095 to the left, improve=0.09597162, (0 missing)
Height < 0.1675 to the left, improve=0.06080490, (0 missing)
Diameter < 0.5125 to the left, improve=0.03221533, (0 missing)
WholeWeight < 1.48025 to the left, improve=0.03003377, (0 missing)
ShuckedWeight < 0.28275 to the right, improve=0.01708752, (0 missing)
Surrogate splits:
WholeWeight < 1.444 to the left, agree=0.916, adj=0.558, (0 split)
Diameter < 0.5275 to the left, agree=0.902, adj=0.487, (0 split)
LongestShell < 0.6725 to the left, agree=0.891, adj=0.430, (0 split)
VisceraWeight < 0.35775 to the left, agree=0.880, adj=0.370, (0 split)
Height < 0.1875 to the left, agree=0.874, adj=0.340, (0 split)
Node number 4: 333 observations
mean=5.93994, MSE=2.627023
Node number 5: 915 observations
mean=8.549727, MSE=4.359003
Node number 6: 1417 observations, complexity param=0.02158515
mean=10.95625, MSE=7.801896
left son=12 (834 obs) right son=13 (583 obs)
Primary splits:
ShuckedWeight < 0.39975 to the right, improve=0.05761623, (0 missing)
ShellWeight < 0.25475 to the left, improve=0.03744456, (0 missing)
Height < 0.1625 to the left, improve=0.02163832, (0 missing)
Diameter < 0.4225 to the right, improve=0.02072119, (0 missing)
LongestShell < 0.5325 to the right, improve=0.01690833, (0 missing)
Surrogate splits:
WholeWeight < 0.94775 to the right, agree=0.873, adj=0.691, (0 split)
LongestShell < 0.5725 to the right, agree=0.829, adj=0.583, (0 split)
Diameter < 0.4525 to the right, agree=0.816, adj=0.552, (0 split)
VisceraWeight < 0.19425 to the right, agree=0.807, adj=0.530, (0 split)
ShellWeight < 0.26325 to the right, agree=0.730, adj=0.345, (0 split)
Node number 7: 335 observations, complexity param=0.0210312
mean=13.42388, MSE=13.39047
left son=14 (237 obs) right son=15 (98 obs)
Primary splits:
ShuckedWeight < 0.589 to the right, improve=0.15486000, (0 missing)
VisceraWeight < 0.29475 to the right, improve=0.08115390, (0 missing)
Diameter < 0.4925 to the right, improve=0.07924906, (0 missing)
ShellWeight < 0.568 to the left, improve=0.07889302, (0 missing)
WholeWeight < 1.4395 to the right, improve=0.06980644, (0 missing)
Surrogate splits:
WholeWeight < 1.38925 to the right, agree=0.896, adj=0.643, (0 split)
VisceraWeight < 0.29825 to the right, agree=0.866, adj=0.541, (0 split)
LongestShell < 0.6375 to the right, agree=0.833, adj=0.429, (0 split)
Diameter < 0.5175 to the right, agree=0.791, adj=0.286, (0 split)
ShellWeight < 0.41175 to the right, agree=0.734, adj=0.092, (0 split)
Node number 12: 834 observations
mean=10.39568, MSE=4.845833
Node number 13: 583 observations, complexity param=0.02158515
mean=11.75815, MSE=10.93808
left son=26 (321 obs) right son=27 (262 obs)
Primary splits:
ShellWeight < 0.25475 to the left, improve=0.12372390, (0 missing)
WholeWeight < 0.942 to the left, improve=0.09615794, (0 missing)
Height < 0.1525 to the left, improve=0.07877211, (0 missing)
Type splits as RLR, improve=0.05910621, (0 missing)
ShuckedWeight < 0.2545 to the right, improve=0.03263195, (0 missing)
Surrogate splits:
WholeWeight < 0.84075 to the left, agree=0.844, adj=0.653, (0 split)
Diameter < 0.4425 to the left, agree=0.710, adj=0.355, (0 split)
LongestShell < 0.5525 to the left, agree=0.703, adj=0.340, (0 split)
Height < 0.1575 to the left, agree=0.702, adj=0.336, (0 split)
VisceraWeight < 0.19625 to the left, agree=0.683, adj=0.294, (0 split)
Node number 14: 237 observations
mean=12.49789, MSE=10.23312
Node number 15: 98 observations
mean=15.66327, MSE=13.93763
Node number 26: 321 observations
mean=10.70717, MSE=7.197737
Node number 27: 262 observations
mean=13.0458, MSE=12.50935 O pacote rpart.plot permite gerar árvores customizadas a partir de um objeto rpart:
rpart.plot(tree)heat.tree <- function(tree, low.is.green = FALSE, ...) { # dots args passed to prp
y <- tree$frame$yval
if(low.is.green)
y <- -y
max <- max(y)
min <- min(y)
cols <- rainbow(99, end = .36)[
ifelse(y > y[1], (y-y[1]) * (99-50) / (max-y[1]) + 50,
(y-min) * (50-1) / (y[1]-min) + 1)]
prp(tree, branch.col = cols, box.col = cols, ...)
}
heat.tree(tree, type = 4, varlen = 0, faclen = 0, fallen.leaves = TRUE)par(mfrow = c(4,3))
for(iframe in 1:nrow(tree$frame)) {
cols <- ifelse(1:nrow(tree$frame) <= iframe, "black", "gray")
prp(tree, col = cols, branch.col = cols, split.col = cols)
}Usando a função printcp(tree) pode-se obter a tabela custo-complexidade e outras informações adicionais para o modelo ajustado. Em primeiro lugar, a função relata as variáveis atualmente usuadas para a construção da árvore de regressão: ShellWeight e ShuckedWeight. Também é mostrado o erro no nó raiz, isto é, o erro da árvore sem divisões. Tal erro nada mais é do que o MSE, dado por SSE/N. Onde: SSE = soma de erro quadrático e N = número de observações. Neste primeiro momento, o cálculo do SSE é dado pela soma da diferença entre os valores empíricos de Rings e a média aritmética de Rings em todo cojunto de treinamento.
cp <- printcp(tree) # Tabela de custo-complexidade.
Regression tree:
rpart(formula = Rings ~ ., data = train, method = "anova", control = rpart.control(cp = 0.01))
Variables actually used in tree construction:
[1] ShellWeight ShuckedWeight
Root node error: 33031/3000 = 11.01
n= 3000
CP nsplit rel error xerror xstd
1 0.281965 0 1.00000 1.00054 0.038430
2 0.050344 1 0.71804 0.72751 0.030446
3 0.049949 2 0.66769 0.68296 0.029040
4 0.021585 3 0.61774 0.64712 0.027587
5 0.021031 5 0.57457 0.62956 0.027037
6 0.014659 6 0.55354 0.59900 0.026056
7 0.013786 7 0.53888 0.58265 0.025122
8 0.013490 8 0.52510 0.58174 0.025109
9 0.011247 9 0.51161 0.57714 0.024960
10 0.010000 10 0.50036 0.56771 0.024777
rsq.val <- 1-cp[,c(3,4)] # extrai o Rsquared
#R2 <- 1 - (sum((actual-predict )^2)/sum((actual-mean(actual))^2))Pode-se plotar o erro de validação cruzada (10 folds) em relação ao parâmetro de complexidade (CP) usando a função plotcp(tree). A função plota no eixo X o parâmetro de complexidade, no eixo Y o erro relativo obtido por validação cruzada e no eixo Z o número de divisões (nsplits) + 1 (estou em dúvida?). As barras verticais representam o resultado da operação (xerror + xstd). Onde: xerror = Erro relativo na validação, xstd = erro padrão na validação. Assim, tem-se que as barras verticais nada mais são do que o erro relativo + 1 desvio padrão, cujos scores são obtidos por meio de valiadação cruzada. A linha pontilhada é o resultado da operação (xerror + xstd) = (0.56771 + 0.024777) = 0.5924864. O valor 0.5924864 é limiar de decisão da regra 1-SE. A idéia é de que árvores menores (menos complexas) que tenham erros de validação (xerror) menor (ou dentro) desse limiar terão desempenho semelhante a árvore com “menor estatística desempenho” na validação cruzada (menor xerror), com a vantagem de ser mais parcimoniosa (mais simples).
# curva custo-complexidade
par(mfrow=c(1,2), mar=c(4,5,5,3)) # mar(bottom, left, top, right)
plotcp(tree, upper = "splits", minline = TRUE) # Usando "splits" fica mais fácil ver onde cortar a árvore...
plotcp(tree, upper = "size", minline = TRUE) 1 2 3 4 5 6
0.28196475 0.05034368 0.04994897 0.02158515 0.02103120 0.01465854
7 8 9 10
0.01378599 0.01349002 0.01124683 0.01000000
1 2 3 4 5 6
Inf 0.11914337 0.05014593 0.03283528 0.02130637 0.01755810
7 8 9 10
0.01421557 0.01363720 0.01231747 0.01060511
Podemos obter gráficos do ajuste usando a função rsq.rpart(tree). A primeira figura mostra a relação R-squared (coeficiente de determinação) versus Number of Splits (número de divisões). Nesta figura duas curvas são plotadas indicando o R-squared Relativo e R-squared Apparent. O “rel error” é 1−R2, semelhante a regressão linear (creio que seja o erro nas observações usadas para treinar o modelo?). O “xerror” está relacionado à estatística PRESS. Este é o erro nas observações dos dados de validação cruzada. (Fonte: https://stats.stackexchange.com/questions/103018/difference-between-rel-error-and-xerror-in-rpart-regression-trees).
A segunda figura é equivalente a obtida pela função plotcp(tree), porém sem a linha pontilhada que mostrar o limiar para poda da árvore considerando a regra 1-SE. Anteriormente, observando o gráfico da função plotcp(tree) a sugestão foi que a árvore fosse podada (prune) para incluir apenas 7 divisões.
rsq.rpart(tree)
Regression tree:
rpart(formula = Rings ~ ., data = train, method = "anova", control = rpart.control(cp = 0.01))
Variables actually used in tree construction:
[1] ShellWeight ShuckedWeight
Root node error: 33031/3000 = 11.01
n= 3000
CP nsplit rel error xerror xstd
1 0.281965 0 1.00000 1.00054 0.038430
2 0.050344 1 0.71804 0.72751 0.030446
3 0.049949 2 0.66769 0.68296 0.029040
4 0.021585 3 0.61774 0.64712 0.027587
5 0.021031 5 0.57457 0.62956 0.027037
6 0.014659 6 0.55354 0.59900 0.026056
7 0.013786 7 0.53888 0.58265 0.025122
8 0.013490 8 0.52510 0.58174 0.025109
9 0.011247 9 0.51161 0.57714 0.024960
10 0.010000 10 0.50036 0.56771 0.0247776.3 Usando cp = 0.001 para ajustar a árvore (sugerido na atividade)
# Aqui o valor de cp = 0.001
set.seed(1)
(tree.cp3 <- rpart(Rings ~ ., data = train, method="anova", control = rpart.control(cp = 0.001)))
n= 3000
node), split, n, deviance, yval
* denotes terminal node
1) root 3000 33030.56000 9.941000
2) ShellWeight< 0.19475 1248 6526.16600 7.853365
4) ShellWeight< 0.06775 333 874.79880 5.939940
8) ShellWeight< 0.0265 92 104.95650 4.478261 *
9) ShellWeight>=0.0265 241 498.24900 6.497925
18) Type=F,I 201 277.49250 6.268657 *
19) Type=M 40 157.10000 7.650000
38) Diameter< 0.2425 25 62.00000 6.800000 *
39) Diameter>=0.2425 15 46.93333 9.066667 *
5) ShellWeight>=0.06775 915 3988.48700 8.549727
10) ShellWeight< 0.11925 367 1046.77400 7.771117
20) Type=I 253 526.11070 7.332016 *
21) Type=F,M 114 363.62280 8.745614 *
11) ShellWeight>=0.11925 548 2570.22400 9.071168
22) ShuckedWeight>=0.22525 288 727.98610 8.506944
44) ShellWeight< 0.1595 100 120.75000 7.750000 *
45) ShellWeight>=0.1595 188 519.46280 8.909574
90) Type=I,M 145 325.83450 8.710345 *
91) Type=F 43 168.46510 9.581395
182) ShuckedWeight>=0.26725 27 33.18519 8.740741 *
183) ShuckedWeight< 0.26725 16 84.00000 11.000000 *
23) ShuckedWeight< 0.22525 260 1648.99600 9.696154
46) ShellWeight< 0.151 161 799.80120 9.161491
92) ShuckedWeight>=0.124 153 642.99350 9.006536
184) Height< 0.1325 136 470.23530 8.794118
368) Type=I 68 169.69120 8.220588 *
369) Type=F,M 68 255.80880 9.367647 *
185) Height>=0.1325 17 117.52940 10.705880 *
93) ShuckedWeight< 0.124 8 82.87500 12.125000 *
47) ShellWeight>=0.151 99 728.32320 10.565660
94) WholeWeight< 0.57275 89 534.80900 10.303370
188) ShuckedWeight>=0.20925 27 45.62963 9.296296 *
189) ShuckedWeight< 0.20925 62 449.87100 10.741940 *
95) WholeWeight>=0.57275 10 132.90000 12.900000 *
3) ShellWeight>=0.19475 1752 17190.94000 11.428080
6) ShellWeight< 0.4095 1417 11055.29000 10.956250
12) ShuckedWeight>=0.39975 834 4041.42400 10.395680
24) ShellWeight< 0.29275 307 705.51790 9.397394
48) ShellWeight< 0.25975 147 154.17690 8.925170 *
49) ShellWeight>=0.25975 160 488.44370 9.831250
98) ShuckedWeight>=0.44525 116 216.86210 9.534483 *
99) ShuckedWeight< 0.44525 44 234.43180 10.613640
198) VisceraWeight< 0.203 22 51.86364 9.772727 *
199) VisceraWeight>=0.203 22 151.45450 11.454550
398) VisceraWeight>=0.2235 14 37.21429 10.357140 *
399) VisceraWeight< 0.2235 8 67.87500 13.375000 *
25) ShellWeight>=0.29275 527 2851.72700 10.977230
50) ShuckedWeight>=0.44425 469 1994.26400 10.739870
100) ShellWeight< 0.37725 365 1300.31200 10.550680
200) ShuckedWeight>=0.588 129 216.48060 10.108530 *
201) ShuckedWeight< 0.588 236 1044.82600 10.792370
402) Height< 0.1925 226 834.76550 10.659290 *
403) Height>=0.1925 10 115.60000 13.800000 *
101) ShellWeight>=0.37725 104 635.03850 11.403850
202) ShuckedWeight>=0.473 97 428.51550 11.123710 *
203) ShuckedWeight< 0.473 7 93.42857 15.285710 *
51) ShuckedWeight< 0.44425 58 617.37930 12.896550
102) VisceraWeight>=0.20275 47 346.21280 12.319150 *
103) VisceraWeight< 0.20275 11 188.54550 15.363640 *
13) ShuckedWeight< 0.39975 583 6376.89900 11.758150
26) ShellWeight< 0.25475 321 2310.47400 10.707170
52) ShuckedWeight>=0.2425 271 1280.63500 10.195570
104) Height< 0.1525 216 766.55090 9.893519
208) ShellWeight< 0.2395 174 489.20110 9.614943
416) ShuckedWeight>=0.304 111 214.97300 9.135135 *
417) ShuckedWeight< 0.304 63 203.65080 10.460320
834) WholeWeight< 0.735 54 118.53700 10.092590 *
835) WholeWeight>=0.735 9 34.00000 12.666670 *
209) ShellWeight>=0.2395 42 207.90480 11.047620 *
105) Height>=0.1525 55 416.98180 11.381820
210) LongestShell>=0.5325 29 73.31034 10.241380 *
211) LongestShell< 0.5325 26 263.88460 12.653850
422) WholeWeight< 0.749 15 101.60000 11.400000 *
423) WholeWeight>=0.749 11 106.54550 14.363640 *
53) ShuckedWeight< 0.2425 50 574.48000 13.480000
106) WholeWeight< 0.63925 32 203.50000 12.125000
212) Type=I,M 21 106.95240 11.380950 *
213) Type=F 11 62.72727 13.545450 *
107) WholeWeight>=0.63925 18 207.77780 15.888890 *
27) ShellWeight>=0.25475 262 3277.45000 13.045800
54) ShellWeight< 0.36425 245 2757.53500 12.783670
108) ShuckedWeight>=0.34475 124 1157.19400 11.919350
216) WholeWeight< 0.942 68 391.05880 10.882350 *
217) WholeWeight>=0.942 56 604.21430 13.178570
434) VisceraWeight>=0.187 49 432.00000 12.714290
868) WholeWeight< 1.081 40 317.50000 12.250000
1736) Diameter>=0.4375 33 206.96970 11.696970
3472) VisceraWeight>=0.21525 25 76.00000 11.000000 *
3473) VisceraWeight< 0.21525 8 80.87500 13.875000 *
1737) Diameter< 0.4375 7 52.85714 14.857140 *
869) WholeWeight>=1.081 9 67.55556 14.777780 *
435) VisceraWeight< 0.187 7 87.71429 16.428570 *
109) ShuckedWeight< 0.34475 121 1412.77700 13.669420
218) WholeWeight< 0.81 44 527.88640 12.659090
436) Height>=0.1425 29 283.86210 11.931030 *
437) Height< 0.1425 15 198.93330 14.066670 *
219) WholeWeight>=0.81 77 814.31170 14.246750
438) VisceraWeight>=0.16375 62 565.17740 13.693550
876) Diameter>=0.4475 23 133.65220 12.434780 *
877) Diameter< 0.4475 39 373.58970 14.435900
1754) WholeWeight< 0.9185 29 287.79310 13.724140
3508) VisceraWeight>=0.1955 10 50.90000 12.100000 *
3509) VisceraWeight< 0.1955 19 196.63160 14.578950 *
1755) WholeWeight>=0.9185 10 28.50000 16.500000 *
439) VisceraWeight< 0.16375 15 151.73330 16.533330 *
55) ShellWeight>=0.36425 17 260.47060 16.823530 *
7) ShellWeight>=0.4095 335 4485.80900 13.423880
14) ShuckedWeight>=0.589 237 2425.24900 12.497890
28) ShellWeight< 0.568 188 1250.31900 11.797870
56) ShuckedWeight>=0.70575 116 327.75000 11.250000 *
57) ShuckedWeight< 0.70575 72 831.65280 12.680560
114) WholeWeight< 1.71425 62 424.85480 12.048390
228) WholeWeight< 1.552 38 239.26320 11.421050
456) WholeWeight>=1.4285 31 120.19350 10.838710 *
457) WholeWeight< 1.4285 7 62.00000 14.000000 *
229) WholeWeight>=1.552 24 146.95830 13.041670
458) VisceraWeight< 0.3335 7 22.85714 11.142860 *
459) VisceraWeight>=0.3335 17 88.47059 13.823530 *
115) WholeWeight>=1.71425 10 228.40000 16.600000 *
29) ShellWeight>=0.568 49 729.34690 15.183670
58) ShuckedWeight>=0.77 27 237.62960 13.296300 *
59) ShuckedWeight< 0.77 22 277.50000 17.500000
118) LongestShell>=0.6925 14 124.85710 16.285710 *
119) LongestShell< 0.6925 8 95.87500 19.625000 *
15) ShuckedWeight< 0.589 98 1365.88800 15.663270
30) Diameter>=0.4925 71 741.77460 14.943660
60) WholeWeight< 1.35025 33 238.18180 13.545450
120) VisceraWeight>=0.25475 23 103.21740 12.652170 *
121) VisceraWeight< 0.25475 10 74.40000 15.600000 *
61) WholeWeight>=1.35025 38 383.05260 16.157890
122) Height< 0.1975 20 172.95000 15.050000
244) Height>=0.1825 11 35.63636 13.818180 *
245) Height< 0.1825 9 100.22220 16.555560 *
123) Height>=0.1975 18 158.27780 17.388890 *
31) Diameter< 0.4925 27 490.66670 17.555560
62) WholeWeight< 1.2975 19 368.42110 16.631580 *
63) WholeWeight>=1.2975 8 67.50000 19.750000 *# curva custo-complexidade (em função do n. splits)
plotcp(tree.cp3, upper = "splits", minline = TRUE)
abline(v = 7, lty = "dashed", col = "red")# curva custo-complexidade (em função de size)
plotcp(tree.cp3, upper = "size", minline = TRUE)
abline(v = 7, lty = "dashed", col = "red")6.4 Usando cp = 0 para ajustar a árvore (nenhuma penalidade resulta em uma árvore totalmente adulta)
# Aqui o valor de cp = 0
set.seed(1)
(tree.cp4 <- rpart(Rings ~ ., data = train, method="anova", control = rpart.control(cp = 0)))
n= 3000
node), split, n, deviance, yval
* denotes terminal node
1) root 3000 3.303056e+04 9.941000
2) ShellWeight< 0.19475 1248 6.526166e+03 7.853365
4) ShellWeight< 0.06775 333 8.747988e+02 5.939940
8) ShellWeight< 0.0265 92 1.049565e+02 4.478261
16) ShuckedWeight< 0.00725 12 8.916667e+00 3.083333 *
17) ShuckedWeight>=0.00725 80 6.918750e+01 4.687500
34) VisceraWeight< 0.01025 31 2.393548e+01 4.258065
68) VisceraWeight>=0.00575 19 6.000000e+00 4.000000 *
69) VisceraWeight< 0.00575 12 1.466667e+01 4.666667 *
35) VisceraWeight>=0.01025 49 3.591837e+01 4.959184
70) ShuckedWeight>=0.02825 21 1.628571e+01 4.714286
140) LongestShell< 0.2475 7 2.857143e+00 4.142857 *
141) LongestShell>=0.2475 14 1.000000e+01 5.000000 *
71) ShuckedWeight< 0.02825 28 1.742857e+01 5.142857
142) ShellWeight< 0.01875 15 8.400000e+00 4.800000 *
143) ShellWeight>=0.01875 13 5.230769e+00 5.538462 *
9) ShellWeight>=0.0265 241 4.982490e+02 6.497925
18) Type=F,I 201 2.774925e+02 6.268657
36) VisceraWeight< 0.02975 65 6.301538e+01 5.723077
72) ShuckedWeight>=0.041 45 3.097778e+01 5.577778
144) VisceraWeight< 0.025 22 6.772727e+00 5.318182
288) ShellWeight>=0.0305 14 1.714286e+00 5.142857 *
289) ShellWeight< 0.0305 8 3.875000e+00 5.625000 *
145) VisceraWeight>=0.025 23 2.130435e+01 5.826087
290) Diameter>=0.2325 8 5.875000e+00 5.375000 *
291) Diameter< 0.2325 15 1.293333e+01 6.066667 *
73) ShuckedWeight< 0.041 20 2.895000e+01 6.050000
146) LongestShell< 0.2825 13 1.307692e+01 5.615385 *
147) LongestShell>=0.2825 7 8.857143e+00 6.857143 *
37) VisceraWeight>=0.02975 136 1.858824e+02 6.529412
74) ShellWeight< 0.03925 10 2.500000e+00 5.500000 *
75) ShellWeight>=0.03925 126 1.719444e+02 6.611111
150) ShuckedWeight>=0.07325 83 6.421687e+01 6.325301
300) VisceraWeight< 0.03525 17 1.494118e+01 5.941176 *
301) VisceraWeight>=0.03525 66 4.612121e+01 6.424242
602) ShellWeight< 0.05925 30 2.136667e+01 6.233333
1204) ShuckedWeight< 0.08625 16 7.750000e+00 5.875000 *
1205) ShuckedWeight>=0.08625 14 9.214286e+00 6.642857 *
603) ShellWeight>=0.05925 36 2.275000e+01 6.583333
1206) ShuckedWeight>=0.0955 20 1.175000e+01 6.250000
2412) Height>=0.0875 11 4.909091e+00 5.909091 *
2413) Height< 0.0875 9 4.000000e+00 6.666667 *
1207) ShuckedWeight< 0.0955 16 6.000000e+00 7.000000 *
151) ShuckedWeight< 0.07325 43 8.786047e+01 7.162791
302) ShellWeight< 0.04975 23 2.486957e+01 6.695652
604) ShellWeight>=0.04225 16 7.437500e+00 6.312500 *
605) ShellWeight< 0.04225 7 9.714286e+00 7.571429 *
303) ShellWeight>=0.04975 20 5.220000e+01 7.700000
606) ShuckedWeight>=0.0645 13 1.676923e+01 7.307692 *
607) ShuckedWeight< 0.0645 7 2.971429e+01 8.428571 *
19) Type=M 40 1.571000e+02 7.650000
38) Diameter< 0.2425 25 6.200000e+01 6.800000
76) Diameter< 0.2225 14 1.035714e+01 6.214286 *
77) Diameter>=0.2225 11 4.072727e+01 7.545455 *
39) Diameter>=0.2425 15 4.693333e+01 9.066667 *
5) ShellWeight>=0.06775 915 3.988487e+03 8.549727
10) ShellWeight< 0.11925 367 1.046774e+03 7.771117
20) Type=I 253 5.261107e+02 7.332016
40) ShellWeight< 0.11275 221 3.861357e+02 7.221719
80) ShuckedWeight>=0.09525 185 2.693838e+02 7.118919
160) ShellWeight< 0.09425 94 9.520213e+01 6.861702
320) VisceraWeight>=0.06025 50 3.488000e+01 6.680000
640) ShuckedWeight>=0.1165 43 2.846512e+01 6.581395
1280) VisceraWeight< 0.0675 26 2.034615e+01 6.423077
2560) LongestShell>=0.3925 17 1.247059e+01 6.176471 *
2561) LongestShell< 0.3925 9 4.888889e+00 6.888889 *
1281) VisceraWeight>=0.0675 17 6.470588e+00 6.823529 *
641) ShuckedWeight< 0.1165 7 3.428571e+00 7.285714 *
321) VisceraWeight< 0.06025 44 5.679545e+01 7.068182
642) Diameter< 0.2875 17 1.411765e+01 6.588235 *
643) Diameter>=0.2875 27 3.629630e+01 7.370370
1286) LongestShell>=0.3975 11 7.636364e+00 6.818182 *
1287) LongestShell< 0.3975 16 2.300000e+01 7.750000 *
161) ShellWeight>=0.09425 91 1.615385e+02 7.384615
322) WholeWeight>=0.35775 50 6.298000e+01 6.980000
644) VisceraWeight< 0.09975 43 3.186047e+01 6.837209
1288) ShellWeight< 0.10825 28 1.685714e+01 6.571429
2576) ShuckedWeight< 0.1715 12 5.666667e+00 6.166667 *
2577) ShuckedWeight>=0.1715 16 7.750000e+00 6.875000 *
1289) ShellWeight>=0.10825 15 9.333333e+00 7.333333 *
645) VisceraWeight>=0.09975 7 2.485714e+01 7.857143 *
323) WholeWeight< 0.35775 41 8.039024e+01 7.878049
646) VisceraWeight< 0.07775 34 5.944118e+01 7.676471
1292) VisceraWeight>=0.06575 13 6.923077e+00 6.923077 *
1293) VisceraWeight< 0.06575 21 4.057143e+01 8.142857
2586) ShuckedWeight< 0.13975 12 1.625000e+01 7.750000 *
2587) ShuckedWeight>=0.13975 9 2.000000e+01 8.666667 *
647) VisceraWeight>=0.07775 7 1.285714e+01 8.857143 *
81) ShuckedWeight< 0.09525 36 1.047500e+02 7.750000
162) WholeWeight< 0.2245 23 1.982609e+01 7.086957
324) Height< 0.0975 16 9.750000e+00 6.875000 *
325) Height>=0.0975 7 7.714286e+00 7.571429 *
163) WholeWeight>=0.2245 13 5.692308e+01 8.923077 *
41) ShellWeight>=0.11275 32 1.187188e+02 8.093750
82) ShuckedWeight>=0.21625 9 4.888889e+00 7.111111 *
83) ShuckedWeight< 0.21625 23 1.017391e+02 8.478261
166) LongestShell< 0.4475 14 2.892857e+01 8.071429 *
167) LongestShell>=0.4475 9 6.688889e+01 9.111111 *
21) Type=F,M 114 3.636228e+02 8.745614
42) ShuckedWeight>=0.128 50 1.240200e+02 8.140000
84) Type=M 27 3.066667e+01 7.555556
168) ShellWeight< 0.10125 9 1.288889e+01 7.111111 *
169) ShellWeight>=0.10125 18 1.511111e+01 7.777778 *
85) Type=F 23 7.330435e+01 8.826087
170) LongestShell< 0.4025 8 8.000000e+00 8.000000 *
171) LongestShell>=0.4025 15 5.693333e+01 9.266667 *
43) ShuckedWeight< 0.128 64 2.069375e+02 9.218750
86) Diameter< 0.2825 25 7.576000e+01 8.360000
172) VisceraWeight>=0.0475 17 3.411765e+01 7.588235 *
173) VisceraWeight< 0.0475 8 1.000000e+01 10.000000 *
87) Diameter>=0.2825 39 1.009231e+02 9.769231
174) ShellWeight< 0.10275 32 6.400000e+01 9.500000
348) Height< 0.0975 9 9.555556e+00 8.777778 *
349) Height>=0.0975 23 4.791304e+01 9.782609
698) Height>=0.1125 7 9.428571e+00 8.714286 *
699) Height< 0.1125 16 2.700000e+01 10.250000 *
175) ShellWeight>=0.10275 7 2.400000e+01 11.000000 *
11) ShellWeight>=0.11925 548 2.570224e+03 9.071168
22) ShuckedWeight>=0.22525 288 7.279861e+02 8.506944
44) ShellWeight< 0.1595 100 1.207500e+02 7.750000
88) ShellWeight< 0.1445 51 3.862745e+01 7.450980
176) VisceraWeight< 0.14 41 2.448780e+01 7.292683
352) Height>=0.1075 34 1.826471e+01 7.147059
704) ShellWeight< 0.13125 11 4.545455e+00 6.636364 *
705) ShellWeight>=0.13125 23 9.478261e+00 7.391304
1410) WholeWeight>=0.521 16 7.000000e+00 7.250000 *
1411) WholeWeight< 0.521 7 1.428571e+00 7.714286 *
353) Height< 0.1075 7 2.000000e+00 8.000000 *
177) VisceraWeight>=0.14 10 8.900000e+00 8.100000 *
89) ShellWeight>=0.1445 49 7.281633e+01 8.061224
178) LongestShell>=0.4775 40 5.110000e+01 7.850000
356) Diameter< 0.3925 32 3.121875e+01 7.656250
712) WholeWeight>=0.6005 13 1.430769e+01 7.230769 *
713) WholeWeight< 0.6005 19 1.294737e+01 7.947368 *
357) Diameter>=0.3925 8 1.387500e+01 8.625000 *
179) LongestShell< 0.4775 9 1.200000e+01 9.000000 *
45) ShellWeight>=0.1595 188 5.194628e+02 8.909574
90) Type=I,M 145 3.258345e+02 8.710345
180) VisceraWeight< 0.16075 125 2.092000e+02 8.520000
360) WholeWeight>=0.5935 82 9.297561e+01 8.292683
720) LongestShell< 0.5125 33 2.024242e+01 7.848485
1440) VisceraWeight< 0.14425 26 1.111538e+01 7.730769
2880) Diameter< 0.3825 9 4.222222e+00 7.444444 *
2881) Diameter>=0.3825 17 5.764706e+00 7.882353 *
1441) VisceraWeight>=0.14425 7 7.428571e+00 8.285714 *
721) LongestShell>=0.5125 49 6.183673e+01 8.591837
1442) VisceraWeight>=0.15775 7 4.857143e+00 7.857143 *
1443) VisceraWeight< 0.15775 42 5.257143e+01 8.714286
2886) LongestShell< 0.5325 29 2.724138e+01 8.517241
5772) WholeWeight< 0.62825 8 4.000000e+00 8.000000 *
5773) WholeWeight>=0.62825 21 2.028571e+01 8.714286
11546) VisceraWeight>=0.13925 11 1.672727e+01 8.454545 *
11547) VisceraWeight< 0.13925 10 2.000000e+00 9.000000 *
2887) LongestShell>=0.5325 13 2.169231e+01 9.153846 *
361) WholeWeight< 0.5935 43 1.039070e+02 8.953488
722) WholeWeight< 0.58075 29 2.124138e+01 8.482759
1444) LongestShell>=0.5025 17 7.764706e+00 8.117647 *
1445) LongestShell< 0.5025 12 8.000000e+00 9.000000 *
723) WholeWeight>=0.58075 14 6.292857e+01 9.928571 *
181) VisceraWeight>=0.16075 20 8.380000e+01 9.900000
362) LongestShell>=0.5175 12 3.491667e+01 8.916667 *
363) LongestShell< 0.5175 8 1.987500e+01 11.375000 *
91) Type=F 43 1.684651e+02 9.581395
182) ShuckedWeight>=0.26725 27 3.318519e+01 8.740741
364) WholeWeight>=0.694 13 4.769231e+00 8.307692 *
365) WholeWeight< 0.694 14 2.371429e+01 9.142857 *
183) ShuckedWeight< 0.26725 16 8.400000e+01 11.000000 *
23) ShuckedWeight< 0.22525 260 1.648996e+03 9.696154
46) ShellWeight< 0.151 161 7.998012e+02 9.161491
92) ShuckedWeight>=0.124 153 6.429935e+02 9.006536
184) Height< 0.1325 136 4.702353e+02 8.794118
368) Type=I 68 1.696912e+02 8.220588
736) VisceraWeight< 0.1125 58 1.099310e+02 8.034483
1472) Diameter>=0.3425 44 5.654545e+01 7.818182
2944) ShellWeight< 0.144 32 2.387500e+01 7.562500
5888) Height>=0.1175 8 6.000000e+00 7.000000 *
5889) Height< 0.1175 24 1.450000e+01 7.750000
11778) Diameter< 0.3525 10 6.400000e+00 7.400000 *
11779) Diameter>=0.3525 14 6.000000e+00 8.000000 *
2945) ShellWeight>=0.144 12 2.500000e+01 8.500000 *
1473) Diameter< 0.3425 14 4.485714e+01 8.714286 *
737) VisceraWeight>=0.1125 10 4.610000e+01 9.300000 *
369) Type=F,M 68 2.558088e+02 9.367647
738) VisceraWeight< 0.1135 58 2.096034e+02 9.155172
1476) ShuckedWeight>=0.16525 35 9.960000e+01 8.800000
2952) WholeWeight< 0.4385 11 1.200000e+01 8.000000 *
2953) WholeWeight>=0.4385 24 7.733333e+01 9.166667
5906) Height>=0.1125 17 3.847059e+01 8.823529 *
5907) Height< 0.1125 7 3.200000e+01 10.000000 *
1477) ShuckedWeight< 0.16525 23 9.886957e+01 9.695652
2954) ShuckedWeight< 0.158 14 3.692857e+01 9.071429 *
2955) ShuckedWeight>=0.158 9 4.800000e+01 10.666670 *
739) VisceraWeight>=0.1135 10 2.840000e+01 10.600000 *
185) Height>=0.1325 17 1.175294e+02 10.705880 *
93) ShuckedWeight< 0.124 8 8.287500e+01 12.125000 *
47) ShellWeight>=0.151 99 7.283232e+02 10.565660
94) WholeWeight< 0.57275 89 5.348090e+02 10.303370
188) ShuckedWeight>=0.20925 27 4.562963e+01 9.296296
376) Type=I 13 1.123077e+01 8.538462 *
377) Type=F,M 14 2.000000e+01 10.000000 *
189) ShuckedWeight< 0.20925 62 4.498710e+02 10.741940
378) Type=M 19 2.515789e+01 9.789474 *
379) Type=F,I 43 3.998605e+02 11.162790
758) Height>=0.1325 19 8.442105e+01 10.368420 *
759) Height< 0.1325 24 2.939583e+02 11.791670
1518) WholeWeight< 0.477 13 1.332308e+02 10.538460 *
1519) WholeWeight>=0.477 11 1.161818e+02 13.272730 *
95) WholeWeight>=0.57275 10 1.329000e+02 12.900000 *
3) ShellWeight>=0.19475 1752 1.719094e+04 11.428080
6) ShellWeight< 0.4095 1417 1.105529e+04 10.956250
12) ShuckedWeight>=0.39975 834 4.041424e+03 10.395680
24) ShellWeight< 0.29275 307 7.055179e+02 9.397394
48) ShellWeight< 0.25975 147 1.541769e+02 8.925170
96) LongestShell< 0.5375 16 7.937500e+00 8.437500 *
97) LongestShell>=0.5375 131 1.419695e+02 8.984733
194) WholeWeight>=0.83175 124 1.366048e+02 8.943548
388) Height>=0.1375 105 9.939048e+01 8.876190
776) ShellWeight< 0.243 58 4.277586e+01 8.672414
1552) WholeWeight>=0.89275 37 2.518919e+01 8.540541
3104) Diameter< 0.4625 26 1.188462e+01 8.346154
6208) VisceraWeight>=0.18625 19 8.526316e+00 8.157895 *
6209) VisceraWeight< 0.18625 7 8.571429e-01 8.857143 *
3105) Diameter>=0.4625 11 1.000000e+01 9.000000 *
1553) WholeWeight< 0.89275 21 1.580952e+01 8.904762
3106) Type=F 9 4.222222e+00 8.444444 *
3107) Type=I,M 12 8.250000e+00 9.250000 *
777) ShellWeight>=0.243 47 5.123404e+01 9.127660
1554) Height>=0.1475 34 3.297059e+01 8.970588
3108) VisceraWeight< 0.21175 17 1.588235e+01 8.647059 *
3109) VisceraWeight>=0.21175 17 1.352941e+01 9.294118 *
1555) Height< 0.1475 13 1.523077e+01 9.538462 *
389) Height< 0.1375 19 3.410526e+01 9.315789 *
195) WholeWeight< 0.83175 7 1.428571e+00 9.714286 *
49) ShellWeight>=0.25975 160 4.884437e+02 9.831250
98) ShuckedWeight>=0.44525 116 2.168621e+02 9.534483
196) VisceraWeight>=0.20625 95 1.648000e+02 9.400000
392) LongestShell< 0.6025 50 7.682000e+01 9.060000
784) VisceraWeight< 0.23125 19 2.073684e+01 8.526316 *
785) VisceraWeight>=0.23125 31 4.735484e+01 9.387097
1570) WholeWeight< 1.11175 15 2.200000e+01 9.000000 *
1571) WholeWeight>=1.11175 16 2.100000e+01 9.750000 *
393) LongestShell>=0.6025 45 7.577778e+01 9.777778
786) LongestShell>=0.6125 29 2.924138e+01 9.482759
1572) Height< 0.1675 20 9.800000e+00 9.100000
3144) Height>=0.1525 10 5.600000e+00 8.800000 *
3145) Height< 0.1525 10 2.400000e+00 9.400000 *
1573) Height>=0.1675 9 1.000000e+01 10.333330 *
787) LongestShell< 0.6125 16 3.943750e+01 10.312500 *
197) VisceraWeight< 0.20625 21 4.257143e+01 10.142860
394) ShuckedWeight>=0.4865 9 8.222222e+00 9.444444 *
395) ShuckedWeight< 0.4865 12 2.666667e+01 10.666670 *
99) ShuckedWeight< 0.44525 44 2.344318e+02 10.613640
198) VisceraWeight< 0.203 22 5.186364e+01 9.772727
396) ShellWeight>=0.26025 15 1.493333e+01 9.266667 *
397) ShellWeight< 0.26025 7 2.485714e+01 10.857140 *
199) VisceraWeight>=0.203 22 1.514545e+02 11.454550
398) VisceraWeight>=0.2235 14 3.721429e+01 10.357140 *
399) VisceraWeight< 0.2235 8 6.787500e+01 13.375000 *
25) ShellWeight>=0.29275 527 2.851727e+03 10.977230
50) ShuckedWeight>=0.44425 469 1.994264e+03 10.739870
100) ShellWeight< 0.37725 365 1.300312e+03 10.550680
200) ShuckedWeight>=0.588 129 2.164806e+02 10.108530
400) WholeWeight< 1.4875 116 1.839655e+02 10.017240
800) ShellWeight< 0.36175 91 1.396703e+02 9.879121
1600) ShellWeight>=0.3095 78 1.123718e+02 9.756410
3200) ShuckedWeight< 0.642 47 6.948936e+01 9.574468
6400) VisceraWeight< 0.30475 34 5.002941e+01 9.382353
12800) Diameter< 0.49 10 1.410000e+01 8.700000 *
12801) Diameter>=0.49 24 2.933333e+01 9.666667
25602) ShellWeight>=0.33 13 1.276923e+01 9.307692 *
25603) ShellWeight< 0.33 11 1.290909e+01 10.090910 *
6401) VisceraWeight>=0.30475 13 1.492308e+01 10.076920 *
3201) ShuckedWeight>=0.642 31 3.896774e+01 10.032260
6402) ShuckedWeight>=0.665 23 2.643478e+01 9.739130
12804) VisceraWeight>=0.30225 7 6.857143e+00 9.142857 *
12805) VisceraWeight< 0.30225 16 1.600000e+01 10.000000 *
6403) ShuckedWeight< 0.665 8 4.875000e+00 10.875000 *
1601) ShellWeight< 0.3095 13 1.907692e+01 10.615380 *
801) ShellWeight>=0.36175 25 3.624000e+01 10.520000
1602) LongestShell>=0.6425 13 8.923077e+00 10.076920 *
1603) LongestShell< 0.6425 12 2.200000e+01 11.000000 *
401) WholeWeight>=1.4875 13 2.292308e+01 10.923080 *
201) ShuckedWeight< 0.588 236 1.044826e+03 10.792370
402) Height< 0.1925 226 8.347655e+02 10.659290
804) Diameter< 0.5125 201 6.280995e+02 10.527360
1608) Height< 0.1725 142 3.506831e+02 10.359150
3216) ShellWeight< 0.33475 99 1.879596e+02 10.202020
6432) LongestShell>=0.6375 13 8.769231e+00 9.307692 *
6433) LongestShell< 0.6375 86 1.672209e+02 10.337210
12866) VisceraWeight< 0.304 78 1.238462e+02 10.230770
25732) VisceraWeight>=0.22775 58 7.993103e+01 10.034480
51464) ShellWeight>=0.30875 35 4.468571e+01 9.742857
102928) Height>=0.1525 27 2.274074e+01 9.518519
205856) LongestShell< 0.5975 8 4.000000e+00 9.000000 *
205857) LongestShell>=0.5975 19 1.568421e+01 9.736842 *
102929) Height< 0.1525 8 1.600000e+01 10.500000 *
51465) ShellWeight< 0.30875 23 2.773913e+01 10.478260
102930) Type=M 10 3.600000e+00 9.800000 *
102931) Type=F,I 13 1.600000e+01 11.000000 *
25733) VisceraWeight< 0.22775 20 3.520000e+01 10.800000
51466) LongestShell< 0.5875 7 1.942857e+01 10.285710 *
51467) LongestShell>=0.5875 13 1.292308e+01 11.076920 *
12867) VisceraWeight>=0.304 8 3.387500e+01 11.375000 *
3217) ShellWeight>=0.33475 43 1.546512e+02 10.720930
6434) ShellWeight>=0.34525 23 5.060870e+01 10.130430
12868) LongestShell< 0.6375 14 1.742857e+01 9.428571 *
12869) LongestShell>=0.6375 9 1.555556e+01 11.222220 *
6435) ShellWeight< 0.34525 20 8.680000e+01 11.400000
12870) Height< 0.1625 12 4.266667e+01 10.666670 *
12871) Height>=0.1625 8 2.800000e+01 12.500000 *
1609) Height>=0.1725 59 2.637288e+02 10.932200
3218) ShuckedWeight< 0.476 13 4.000000e+01 10.000000 *
3219) ShuckedWeight>=0.476 46 2.092391e+02 11.195650
6438) ShuckedWeight>=0.51675 29 6.455172e+01 10.655170
12876) WholeWeight>=1.2485 12 3.491667e+01 10.083330 *
12877) WholeWeight< 1.2485 17 2.294118e+01 11.058820 *
6439) ShuckedWeight< 0.51675 17 1.217647e+02 12.117650 *
805) Diameter>=0.5125 25 1.750400e+02 11.720000
1610) WholeWeight< 1.23975 11 5.090909e+01 10.909090 *
1611) WholeWeight>=1.23975 14 1.112143e+02 12.357140 *
403) Height>=0.1925 10 1.156000e+02 13.800000 *
101) ShellWeight>=0.37725 104 6.350385e+02 11.403850
202) ShuckedWeight>=0.473 97 4.285155e+02 11.123710
404) LongestShell>=0.6475 53 9.354717e+01 10.679250
808) VisceraWeight< 0.39225 45 6.911111e+01 10.555560
1616) ShellWeight< 0.39175 13 7.692308e+00 9.846154 *
1617) ShellWeight>=0.39175 32 5.221875e+01 10.843750
3234) ShellWeight>=0.39575 23 2.173913e+01 10.478260
6468) LongestShell>=0.6725 8 8.000000e+00 10.000000 *
6469) LongestShell< 0.6725 15 1.093333e+01 10.733330 *
3235) ShellWeight< 0.39575 9 1.955556e+01 11.777780 *
809) VisceraWeight>=0.39225 8 1.987500e+01 11.375000 *
405) LongestShell< 0.6475 44 3.118864e+02 11.659090
810) WholeWeight< 1.47425 35 1.826857e+02 11.257140
1620) WholeWeight>=1.352 14 1.035714e+01 10.214290 *
1621) WholeWeight< 1.352 21 1.469524e+02 11.952380
3242) ShellWeight< 0.38925 9 2.088889e+01 11.111110 *
3243) ShellWeight>=0.38925 12 1.149167e+02 12.583330 *
811) WholeWeight>=1.47425 9 1.015556e+02 13.222220 *
203) ShuckedWeight< 0.473 7 9.342857e+01 15.285710 *
51) ShuckedWeight< 0.44425 58 6.173793e+02 12.896550
102) VisceraWeight>=0.20275 47 3.462128e+02 12.319150
204) Diameter< 0.4625 12 7.000000e+01 11.000000 *
205) Diameter>=0.4625 35 2.481714e+02 12.771430
410) LongestShell>=0.6025 23 1.738261e+02 12.086960
820) ShellWeight>=0.321 15 9.360000e+01 11.600000 *
821) ShellWeight< 0.321 8 7.000000e+01 13.000000 *
411) LongestShell< 0.6025 12 4.291667e+01 14.083330 *
103) VisceraWeight< 0.20275 11 1.885455e+02 15.363640 *
13) ShuckedWeight< 0.39975 583 6.376899e+03 11.758150
26) ShellWeight< 0.25475 321 2.310474e+03 10.707170
52) ShuckedWeight>=0.2425 271 1.280635e+03 10.195570
104) Height< 0.1525 216 7.665509e+02 9.893519
208) ShellWeight< 0.2395 174 4.892011e+02 9.614943
416) ShuckedWeight>=0.304 111 2.149730e+02 9.135135
832) WholeWeight< 0.80425 81 1.132099e+02 8.901235
1664) ShuckedWeight>=0.33725 44 4.443182e+01 8.613636
3328) LongestShell< 0.5675 36 3.088889e+01 8.444444
6656) ShuckedWeight< 0.346 7 4.857143e+00 7.857143 *
6657) ShuckedWeight>=0.346 29 2.303448e+01 8.586207
13314) ShuckedWeight>=0.36275 12 1.225000e+01 8.250000 *
13315) ShuckedWeight< 0.36275 17 8.470588e+00 8.823529 *
3329) LongestShell>=0.5675 8 7.875000e+00 9.375000 *
1665) ShuckedWeight< 0.33725 37 6.081081e+01 9.243243
3330) Type=F 15 1.093333e+01 8.733333 *
3331) Type=I,M 22 4.331818e+01 9.590909
6662) LongestShell>=0.535 11 2.909091e+00 9.090909 *
6663) LongestShell< 0.535 11 3.490909e+01 10.090910 *
833) WholeWeight>=0.80425 30 8.536667e+01 9.766667
1666) Diameter>=0.4225 22 4.931818e+01 9.409091
3332) Diameter< 0.4425 14 1.692857e+01 8.928571 *
3333) Diameter>=0.4425 8 2.350000e+01 10.250000 *
1667) Diameter< 0.4225 8 2.550000e+01 10.750000 *
417) ShuckedWeight< 0.304 63 2.036508e+02 10.460320
834) WholeWeight< 0.735 54 1.185370e+02 10.092590
1668) Diameter>=0.4175 21 1.257143e+01 9.142857
3336) Diameter>=0.4225 14 8.000000e+00 9.000000 *
3337) Diameter< 0.4225 7 3.714286e+00 9.428571 *
1669) Diameter< 0.4175 33 7.496970e+01 10.696970
3338) Height< 0.1425 24 4.562500e+01 10.375000
6676) WholeWeight>=0.62 16 2.293750e+01 10.062500 *
6677) WholeWeight< 0.62 8 1.800000e+01 11.000000 *
3339) Height>=0.1425 9 2.022222e+01 11.555560 *
835) WholeWeight>=0.735 9 3.400000e+01 12.666670 *
209) ShellWeight>=0.2395 42 2.079048e+02 11.047620
418) VisceraWeight< 0.1525 11 1.363636e+01 9.818182 *
419) VisceraWeight>=0.1525 31 1.717419e+02 11.483870
838) LongestShell>=0.5725 11 6.963636e+01 10.181820 *
839) LongestShell< 0.5725 20 7.320000e+01 12.200000
1678) VisceraWeight< 0.18975 13 3.107692e+01 11.615380 *
1679) VisceraWeight>=0.18975 7 2.942857e+01 13.285710 *
105) Height>=0.1525 55 4.169818e+02 11.381820
210) LongestShell>=0.5325 29 7.331034e+01 10.241380
420) VisceraWeight>=0.1745 19 3.042105e+01 9.631579 *
421) VisceraWeight< 0.1745 10 2.240000e+01 11.400000 *
211) LongestShell< 0.5325 26 2.638846e+02 12.653850
422) WholeWeight< 0.749 15 1.016000e+02 11.400000 *
423) WholeWeight>=0.749 11 1.065455e+02 14.363640 *
53) ShuckedWeight< 0.2425 50 5.744800e+02 13.480000
106) WholeWeight< 0.63925 32 2.035000e+02 12.125000
212) Type=I,M 21 1.069524e+02 11.380950
424) WholeWeight< 0.608 13 5.723077e+01 10.461540 *
425) WholeWeight>=0.608 8 2.087500e+01 12.875000 *
213) Type=F 11 6.272727e+01 13.545450 *
107) WholeWeight>=0.63925 18 2.077778e+02 15.888890 *
27) ShellWeight>=0.25475 262 3.277450e+03 13.045800
54) ShellWeight< 0.36425 245 2.757535e+03 12.783670
108) ShuckedWeight>=0.34475 124 1.157194e+03 11.919350
216) WholeWeight< 0.942 68 3.910588e+02 10.882350
432) ShellWeight< 0.2925 52 2.229808e+02 10.519230
864) Height>=0.1375 39 1.407692e+02 10.076920
1728) ShellWeight>=0.26075 32 5.550000e+01 9.625000
3456) ShellWeight>=0.282 11 2.090909e+01 9.090909 *
3457) ShellWeight< 0.282 21 2.980952e+01 9.904762
6914) ShellWeight< 0.27575 13 9.230769e+00 9.461538 *
6915) ShellWeight>=0.27575 8 1.387500e+01 10.625000 *
1729) ShellWeight< 0.26075 7 4.885714e+01 12.142860 *
865) Height< 0.1375 13 5.169231e+01 11.846150 *
433) ShellWeight>=0.2925 16 1.389375e+02 12.062500 *
217) WholeWeight>=0.942 56 6.042143e+02 13.178570
434) VisceraWeight>=0.187 49 4.320000e+02 12.714290
868) WholeWeight< 1.081 40 3.175000e+02 12.250000
1736) Diameter>=0.4375 33 2.069697e+02 11.696970
3472) VisceraWeight>=0.21525 25 7.600000e+01 11.000000
6944) WholeWeight< 0.99075 12 1.691667e+01 10.083330 *
6945) WholeWeight>=0.99075 13 3.969231e+01 11.846150 *
3473) VisceraWeight< 0.21525 8 8.087500e+01 13.875000 *
1737) Diameter< 0.4375 7 5.285714e+01 14.857140 *
869) WholeWeight>=1.081 9 6.755556e+01 14.777780 *
435) VisceraWeight< 0.187 7 8.771429e+01 16.428570 *
109) ShuckedWeight< 0.34475 121 1.412777e+03 13.669420
218) WholeWeight< 0.81 44 5.278864e+02 12.659090
436) Height>=0.1425 29 2.838621e+02 11.931030
872) ShuckedWeight>=0.27175 16 9.093750e+01 11.062500 *
873) ShuckedWeight< 0.27175 13 1.660000e+02 13.000000 *
437) Height< 0.1425 15 1.989333e+02 14.066670 *
219) WholeWeight>=0.81 77 8.143117e+02 14.246750
438) VisceraWeight>=0.16375 62 5.651774e+02 13.693550
876) Diameter>=0.4475 23 1.336522e+02 12.434780
1752) WholeWeight< 0.90025 10 3.810000e+01 11.300000 *
1753) WholeWeight>=0.90025 13 7.276923e+01 13.307690 *
877) Diameter< 0.4475 39 3.735897e+02 14.435900
1754) WholeWeight< 0.9185 29 2.877931e+02 13.724140
3508) VisceraWeight>=0.1955 10 5.090000e+01 12.100000 *
3509) VisceraWeight< 0.1955 19 1.966316e+02 14.578950 *
1755) WholeWeight>=0.9185 10 2.850000e+01 16.500000 *
439) VisceraWeight< 0.16375 15 1.517333e+02 16.533330 *
55) ShellWeight>=0.36425 17 2.604706e+02 16.823530 *
7) ShellWeight>=0.4095 335 4.485809e+03 13.423880
14) ShuckedWeight>=0.589 237 2.425249e+03 12.497890
28) ShellWeight< 0.568 188 1.250319e+03 11.797870
56) ShuckedWeight>=0.70575 116 3.277500e+02 11.250000
112) ShellWeight< 0.45025 34 3.450000e+01 10.500000
224) LongestShell>=0.6825 20 1.655000e+01 10.150000
448) LongestShell< 0.7025 8 6.000000e+00 9.500000 *
449) LongestShell>=0.7025 12 4.916667e+00 10.583330 *
225) LongestShell< 0.6825 14 1.200000e+01 11.000000 *
113) ShellWeight>=0.45025 82 2.661951e+02 11.560980
226) LongestShell>=0.6975 50 7.200000e+01 11.200000
452) Diameter< 0.5725 34 5.073529e+01 10.911760
904) WholeWeight>=2.17025 7 4.857143e+00 10.142860 *
905) WholeWeight< 2.17025 27 4.066667e+01 11.111110
1810) WholeWeight< 2.077 20 2.375000e+01 10.750000
3620) ShuckedWeight>=0.81275 13 1.523077e+01 10.461540 *
3621) ShuckedWeight< 0.81275 7 5.428571e+00 11.285710 *
1811) WholeWeight>=2.077 7 6.857143e+00 12.142860 *
453) Diameter>=0.5725 16 1.243750e+01 11.812500 *
227) LongestShell< 0.6975 32 1.775000e+02 12.125000
454) Diameter< 0.5425 20 4.295000e+01 11.450000
908) Type=F 10 1.290000e+01 10.900000 *
909) Type=M 10 2.400000e+01 12.000000 *
455) Diameter>=0.5425 12 1.102500e+02 13.250000 *
57) ShuckedWeight< 0.70575 72 8.316528e+02 12.680560
114) WholeWeight< 1.71425 62 4.248548e+02 12.048390
228) WholeWeight< 1.552 38 2.392632e+02 11.421050
456) WholeWeight>=1.4285 31 1.201935e+02 10.838710
912) LongestShell>=0.6475 20 3.655000e+01 10.350000
1824) ShellWeight< 0.43775 12 1.425000e+01 9.750000 *
1825) ShellWeight>=0.43775 8 1.150000e+01 11.250000 *
913) LongestShell< 0.6475 11 7.018182e+01 11.727270 *
457) WholeWeight< 1.4285 7 6.200000e+01 14.000000 *
229) WholeWeight>=1.552 24 1.469583e+02 13.041670
458) VisceraWeight< 0.3335 7 2.285714e+01 11.142860 *
459) VisceraWeight>=0.3335 17 8.847059e+01 13.823530 *
115) WholeWeight>=1.71425 10 2.284000e+02 16.600000 *
29) ShellWeight>=0.568 49 7.293469e+02 15.183670
58) ShuckedWeight>=0.77 27 2.376296e+02 13.296300
116) ShuckedWeight>=0.97525 13 4.369231e+01 12.153850 *
117) ShuckedWeight< 0.97525 14 1.612143e+02 14.357140 *
59) ShuckedWeight< 0.77 22 2.775000e+02 17.500000
118) LongestShell>=0.6925 14 1.248571e+02 16.285710 *
119) LongestShell< 0.6925 8 9.587500e+01 19.625000 *
15) ShuckedWeight< 0.589 98 1.365888e+03 15.663270
30) Diameter>=0.4925 71 7.417746e+02 14.943660
60) WholeWeight< 1.35025 33 2.381818e+02 13.545450
120) VisceraWeight>=0.25475 23 1.032174e+02 12.652170
240) ShellWeight< 0.43875 13 2.876923e+01 11.692310 *
241) ShellWeight>=0.43875 10 4.690000e+01 13.900000 *
121) VisceraWeight< 0.25475 10 7.440000e+01 15.600000 *
61) WholeWeight>=1.35025 38 3.830526e+02 16.157890
122) Height< 0.1975 20 1.729500e+02 15.050000
244) Height>=0.1825 11 3.563636e+01 13.818180 *
245) Height< 0.1825 9 1.002222e+02 16.555560 *
123) Height>=0.1975 18 1.582778e+02 17.388890 *
31) Diameter< 0.4925 27 4.906667e+02 17.555560
62) WholeWeight< 1.2975 19 3.684211e+02 16.631580 *
63) WholeWeight>=1.2975 8 6.750000e+01 19.750000 *# curva custo-complexidade (em função do n. splits)
plotcp(tree.cp4, upper = "splits", minline = TRUE)
abline(v = 7, lty = "dashed", col = "red")# curva custo-complexidade (em função de size)
plotcp(tree.cp4, upper = "size", minline = TRUE)
abline(v = 7, lty = "dashed", col = "red")7 Desvendando a árvore de regressão (para a árvore ajustada com parâmetros default)
7.1 A árvore sem divisões
Inicialmente, pode-se considerar que Rings (variável resposta y) pode ser explicado pela sua média. Então, utilizando-se dos valores reais de y do conjunto train (n = 3000) pode-se obter a média empírica e soma de erro quadrático (Sum of Squared Errors - SSE). O cálculo do SSE é dado pela soma da diferença entre os valores empíricos de Rings e a média aritmética de Rings. Assim, têm-se:
- Média aritmética da variável resposta
yno conjuntotrain= 9.941; - Score SSE no conjunto
train= 33030.557.
Quando o modelo treinado tree é impresso verifica-se que os valores 9.941 e 33030.557 irão compor a raíz da árvore de regressão: (1) root n=3000 SSE=33030.5600 Mean=9.941000. No nó raiz estão 100% dos dados do conjunto train.
setDT(train)
hatTrain <- train[,c("Rings", "ShellWeight", "ShuckedWeight")] # seleciona colunas
hatTrain[, `:=` (MeanObs = mean(Rings))][] # média aritmética e empilhahatTrain[, `:=` (SSE = sum((Rings - MeanObs)^2))][] # SSEhatTrain[, `:=` (N=.N)][] # número de observaçõeshatTrain[, `:=` (MSE = sum((Rings - MeanObs)^2)/length(Rings))][] # MSEhatTrain[, `:=` (R2 = 1-(sum((Rings-MeanObs)^2)/sum((Rings-mean(Rings))^2)))] # R-squared
hatTrain[, `:=` (RelError = 1-R2)] # Relative Error7.2 A primeira decisão de partição da árvore de regressão
A partir do modelo de árvore gerado pode-se observar que apenas duas variáveis foram utilizadas pelo CART para produzir a árvore de regressão: ShellWeighte ShuckedWeight. A primeira decisão de partição do algoritmo foi: 2) ShellWeight< 0.19475 n=1248 SSE=6526.1660 Mean=7.853365. Assim, a primeira partição dividiu as 3000 observações em grupos de 1248 (42%) e 1752 (58%) (nós 2 e 3) com valores médios de Rings de 7.853365 e 11.428080, respectivamente. Tendo por base essa primeira partição (ShellWeight < 0.19475 e ShellWeight \(\geq\) 0.19475) pode-se avaliar novamente o score SSE considerando-se a média aritmética dos valores empiricos de Rings em cada partição.
Fazendo cálculos simples podemos ratificar os percentuais apresentados nos dois nós folhas iniciais da árvore de regressão:
with(train,table(ShellWeight<0.19475)) # tabela freq. p/ variável Class ShellWeight<0.19475
FALSE TRUE
1752 1248
with(train,prop.table(table(ShellWeight<0.19475))*100)
FALSE TRUE
58.4 41.6 Então, pode-se calcular as novas médias aritméticas e SSEs para a primeira partição proposta. Os resultados devem corresponder ao observado em:
2) ShellWeight< 0.19475 n=1248 SSE=6526.1660 Mean=7.853365; e
3) ShellWeight>=0.19475 n=1752 SSE=17190.9400 mean=11.428080.
hatTrain$split.1 <- "Part.1"
hatTrain$split.1[hatTrain$ShellWeight >= tree$splits[1,4]] <- "Part.2"
hatTrain[, `:=` (Mean.1 = mean(Rings)), by="split.1"] # média aritmética por partição e empilha
setorder(hatTrain, split.1) # ordenando com base em "binary.1"
hatTrain[, `:=` (SSE.1 = sum((Rings - Mean.1)^2)), by="split.1"][] # SSEhatTrain[, `:=` (N.1=.N), by="split.1"][] # número de observações por partiçãohatTrain[, `:=` (MSE.1 = sum((Rings - Mean.1)^2)/length(Rings)),by="split.1"][] # MSEhatTrain[, `:=` (CP.1 = 1 - sum(unique(SSE.1))/unique(SSE))][] # CPhatTrain[, `:=` (R2.1 = 1-(sum((Rings-Mean.1)^2)/sum((Rings-mean(Rings))^2)))] # R-squared
#1-(SSE.part1 + SSE.part2)/SST
#hatTrain[, `:=` (SE.2= sum((Rings - Mean.2)^2))][] # SSE total primeira partição
#with(hatTrain,table(Particao.1))Para melhor compreensão pode-se fazer um scatterplot das duas variáveis utilizadas (ShellWeighte ShuckedWeight) pelo algoritmo para estabelecer as partições:
p <- ggplot() + theme_stata()
(p <- p + geom_point(data=hatTrain, aes(x=ShellWeight, y=ShuckedWeight)))Aqui, podemos visualizar a primeira partição proposta pelo algoritmo:
p <- ggplot() + theme_stata()
p <- p + geom_point(data=hatTrain, aes(x=ShellWeight, y=ShuckedWeight))
p <- p + geom_vline(xintercept=tree$splits[1,4], colour="red", linetype="dotted")
p <- p + geom_text(aes(x=tree$splits[1,4], y=1.3, label="SheW < 0.19475"),
colour="red", angle=90, vjust = 1.2, text=element_text(size=7))
Warning: Ignoring unknown parameters: text
(p <- p + geom_point(data=hatTrain, aes(x=ShellWeight, y=ShuckedWeight, colour=split.1)) +
scale_colour_manual(values = c("black", "red")) + theme(legend.position="none"))7.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1
- Um nova partição
Inicialmente, como já sabe-se á arvore foi dividida em duas parte: ShellWeight< 0.19475 e e ShellWeight \(\geq\) 0.19475. Assim, vamos considerar as partições do lado esquerdo da árvore. Fazendo-se isso, a próxima partição será: 4) ShellWeight< 0.06775 333 874.7988 5.939940*, que indicará um nó terminal. Caso contrário (ShellWeight \(\geq\) 0.06775) uma nova partição foi realizada. Assim, o conjunto de dados foi dividido em duas parte tendo por base ShellWeight < 0.06775, onde 11% (n=333) dos dados tiveram valores < 0.06775 para a variável ShellWeight, e os demais 31% (n=915) tiveram valores superiores. Tendo por base essa nova partição (ShellWeight < 0.06775 e ShellWeight \(\geq\) 0.06775) pode-se avaliar novamente o score SSE considerando-se a média aritmética dos valores empiricos de y em cada partição.
Fazendo cálculos simples podemos ratificar os percentuais apresentados nos dois nós folhas iniciais da árvore de regressão:
with(hatTrain[ which(ShellWeight<0.19475),],table(ShellWeight<0.06775)) # tabela freq. p/ variável Class ShellWeight<0.06775
FALSE TRUE
915 333 Então, pode-se calcular as novas médias aritméticas e SSEs para a primeira partição proposta. Os resultados devem corresponder ao observado em:
4) ShellWeight< 0.06775 333 874.7988 5.939940 *; e
5) ShellWeight>=0.06775 915 3988.4870 8.549727.
hatTrain$split.2 <- NA
hatTrain$split.2[hatTrain$ShellWeight < 0.19475 & hatTrain$ShellWeight < 0.06775] <- "Part.3"
hatTrain$split.2[hatTrain$ShellWeight < 0.19475 & hatTrain$ShellWeight >= 0.06775] <- "Part.4"
hatTrain$split.2[hatTrain$ShellWeight > 0.19475 & hatTrain$ShellWeight < 0.4095] <- "Part.5"
hatTrain$split.2[hatTrain$ShellWeight > 0.19475 & hatTrain$ShellWeight >= 0.4095] <- "Part.6"
hatTrain[, `:=` (Mean.3 = mean(Rings)), by="split.2"] # média aritmética por partição e empilha
setorder(hatTrain, split.2) # ordenando com base em "binary.1"
hatTrain[, `:=` (SSE.3 = sum((Rings - Mean.3)^2)), by="split.2"][] # SSE#with(hatTrain,table(split.2))Podemos visualizar as novas partições propostas pelo algoritmo:
p <- ggplot() + theme_stata()
p <- p + geom_point(data=hatTrain, aes(x=ShellWeight, y=ShuckedWeight, colour=split.2)) +
scale_colour_manual(values = c("black", "red", "blue", "green")) + theme(legend.position="none")
p <- p + geom_vline(xintercept=0.19475, colour="red", linetype="dotted")
p <- p + geom_vline(xintercept=0.06775, colour="black", linetype="dotted")
p <- p + geom_vline(xintercept=0.4095, colour="blue", linetype="dotted")
p <- p + geom_text(aes(x=0.19475, y=1.3, label="SheW = 0.19475"),
colour="red", angle=90, vjust = 1.2, text=element_text(size=7))
Warning: Ignoring unknown parameters: text
p <- p + geom_text(aes(x=0.06775, y=1.3, label="SheW = 0.06775"),
colour="black", angle=90, vjust = 1.2, text=element_text(size=7))
Warning: Ignoring unknown parameters: text
p <- p + geom_text(aes(x=0.4095, y=1.3, label="SheW = 0.4095"),
colour="blue", angle=90, vjust = 1.2, text=element_text(size=7))
Warning: Ignoring unknown parameters: text
p